//
//  Object.cpp
//  C++02
//
//  Created by 张木林 on 7/14/25.
//

#include "Object.hpp"
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

//struct Stack
//{
//  void Init(size_t capacity)
//    {
//      _array = (DataType*)malloc(sizeof(DataType)*capacity);
//      if(nullptr == _array)
//      {
//          perror("malloc申请空间失败");
//          return;
//      }
//      
//      _capacity = capacity;
//      _size = 0;
//  }
//    
//    void Push(const DataType& data)
//    {
//        //扩容
//        _array[_size] = data;
//        ++_size;
//    }
//    
//    DataType Top()
//    {
//        return _array[_size - 1];
//    }
//    
//    void Destory()
//    {
//        if(_array)
//        {
//            free(_array);
//            _array = nullptr;
//            _capacity = 0;
//            _size = 0;
//        }
//    }
//    DataType* _array;
//    size_t _capacity;
//    size_t _size;
//};


class Date
{
public:
    void Init(int year,int month,int day)
    {
        _year = year;
        _month = month;
        _day = day;
    }
    void Print()
    {
        cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
    }
private:
    int _year;
    int _month;
    int _day;
};



typedef int DataType;
class Stack
{
public:
    void Init()
    {
        _array = (DataType*)malloc(sizeof(DataType)*3);
        if(NULL == _array)
        {
            perror("malloc开辟失败");
            return;
        }
        _capacity = 3;
        _size = 0;
    }
    
    void Push(DataType data)
    {
        CheckCapacity();
        _array[_size] = data;
        ++_size;
    }
    
    void Pop()
    {
        if(Empty())
            return;
        --_size;
    }
    
    DataType Top(){return _array[_size-1];}
    int Empty(){return 0 == _size;}
    int Size(){return _size;}
    
    void Destory()
    {
        if(_array)
        {
            free(_array);
            _array = NULL;
            _capacity = 0;
            _size = 0;
        }
    }
private:
    void CheckCapacity()
    {
        if(_size == _capacity)
        {
            int newcapacity = _capacity*2;
            DataType* temp = (DataType*)realloc(_array, newcapacity*sizeof(DataType));
            if(temp == NULL)
            {
                perror("realloc申请空间失败");
                return;
            }
            _array = temp;
            _capacity = newcapacity;
        }
    }
private:
    DataType* _array;
    int _capacity;
    int _size;
};

